import {IView} from './IView';

export interface IParentView extends IView {
  /** 子组件列表 */
  children: IView[];

  /**
   * 这个父组件是否可以放置指定类型的子组件, 有些特殊的组件只能放特地类型的子组件需要实现这个方法
   * @param viewType 要判断的子组件的类型
   * @return 如果可以接收这个子组件, 则返回true
   */
  accept?: (viewType: string) => boolean;

  /**
   * 如果子组件有些不能被删除的, 则可以实现这个方法来避免
   * @param childViewIndex 子组件的序号, 判断是否不能被删除
   * @return 如果指定序号的子组件不能删除, 则返回true
   */
  preventDelete?: (childViewIndex: number) => boolean;
}

/**
 * 判断一个组件是否是父组件
 * @param view 是否是父组件
 * @return 如果组件是父组件, 则返回true
 */
export default function isParentView(view: IView): view is IParentView {
  return (view as IParentView).children !== undefined;
}
